home *** CD-ROM | disk | FTP | other *** search
/ IRIX 6.5 Complementary Applications 2004 February / SGI IRIX 6.5 Complementary Applications 2004 February.iso / dist / cde.idb / usr / dt / share / examples / dthelp / Main.c.z / Main.c
Encoding:
C/C++ Source or Header  |  2003-11-18  |  31.1 KB  |  1,103 lines

  1. /*
  2.  * Main.c
  3.  *
  4.  * Copyright 2000, Silicon Graphics, Inc.
  5.  * ALL RIGHTS RESERVED
  6.  * 
  7.  * UNPUBLISHED -- Rights reserved under the copyright laws of the United
  8.  * States.   Use of a copyright notice is precautionary only and does not
  9.  * imply publication or disclosure.
  10.  *
  11.  * U.S. GOVERNMENT RESTRICTED RIGHTS LEGEND:
  12.  * Use, duplication or disclosure by the Government is subject to restrictions
  13.  * as set forth in FAR 52.227.19(c)(2) or subparagraph (c)(1)(ii) of the Rights
  14.  * in Technical Data and Computer Software clause at DFARS 252.227-7013 and/or
  15.  * in similar or successor clauses in the FAR, or the DOD or NASA FAR
  16.  * Supplement.  Contractor/manufacturer is Silicon Graphics, Inc.,
  17.  * 2011 N. Shoreline Blvd. Mountain View, CA 94039-7311.
  18.  *
  19.  * THE CONTENT OF THIS WORK CONTAINS CONFIDENTIAL AND PROPRIETARY
  20.  * INFORMATION OF SILICON GRAPHICS, INC. ANY DUPLICATION, MODIFICATION,
  21.  * DISTRIBUTION, OR DISCLOSURE IN ANY FORM, IN WHOLE, OR IN PART, IS STRICTLY
  22.  * PROHIBITED WITHOUT THE PRIOR EXPRESS WRITTEN PERMISSION OF SILICON
  23.  * GRAPHICS, INC.
  24.  */
  25. /* $XConsortium: Main.c /main/cde1_maint/1 1995/07/17 21:00:46 drk $ */
  26. /*************************************<+>*************************************
  27.  *****************************************************************************
  28.  **
  29.  **  File:         Main.c
  30.  **
  31.  **  Project:       CDE dthelpdemo sample program.
  32.  **
  33.  **  Description:  This file contains the demo source for the helpdemo 
  34.  **                application.
  35.  **          
  36.  **
  37.  **  (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994
  38.  **      Hewlett-Packard Company
  39.  **  (c) Copyright 1993, 1994 International Business Machines Corp.
  40.  **  (c) Copyright 1993, 1994 Sun Microsystems, Inc.
  41.  **  (c) Copyright 1993, 1994 Unix System Labs, Inc., a subsidiary of
  42.  **      Novell, Inc.
  43.  **
  44.  ****************************************************************************
  45.  ************************************<+>*************************************/
  46.  
  47. #include <Xm/Xm.h>
  48. #include <Xm/RowColumn.h>
  49. #include <Xm/PushB.h>
  50. #include <Xm/PushBG.h>
  51. #include <Xm/CascadeB.h>
  52. #include <Xm/CascadeBG.h>
  53. #include <Xm/MainW.h>
  54. #include <Xm/Frame.h>
  55. #include <Xm/Form.h>
  56. #include <Xm/Scale.h>
  57. #include <Xm/ToggleBG.h>
  58. #include <Xm/RowColumn.h>
  59. #include <Xm/LabelG.h>
  60.  
  61. /* DtHelp include header file section */
  62. #include <Dt/HelpQuickD.h>
  63.  
  64. /* Local header file include section */
  65. #include "Main.h"
  66. #include "HelpEntry.h"
  67. #include "HelpCacheI.h"
  68. #include "HourGlassI.h"
  69.  
  70. /*  Internal Static Functions  */
  71. static Widget BuildMenus(Widget parent);
  72. static void CreateMainWindow(Widget parent);
  73. static void HelpMenuCB(
  74.     Widget  widget,
  75.     XtPointer clientData,
  76.     XtPointer callData);
  77. static void CloseCB (
  78.     Widget    w,
  79.     XtPointer    clientData,
  80.     XtPointer      callData);
  81. static void ManageButtonsCB(
  82.     Widget  parent,
  83.     XtPointer clientData,
  84.     XtPointer callData);
  85. static void Control1ButtonsCB(
  86.     Widget  parent,
  87.     XtPointer clientData,
  88.     XtPointer callData);
  89. static void HelpCB(
  90.     Widget  widget,
  91.     XtPointer clientData,
  92.     XtPointer callData);
  93. static void DisplayMoreCB (
  94.     Widget    w,
  95.     XtPointer    clientData,
  96.     XtPointer   callData);
  97. static void CloseAndDestroyCB (
  98.     Widget    w,
  99.     XtPointer    clientData,
  100.     XtPointer   callData);
  101.  
  102.  
  103.  
  104.  
  105. /* Global variables for the Main module */
  106. char   *appName;
  107. Widget topLevel;
  108. Widget mainShell;
  109. Widget manWidget = NULL;
  110. Widget quickWidget = NULL;
  111.  
  112. Widget createSampleWidgetBtn, destroySampleWidgetBtn;
  113. Widget controlBtn1, controlBtn2, controlBtn3, controlBtn4;
  114. Widget moreButton=NULL;
  115.  
  116.  
  117. /* toggle button status flags */
  118. Boolean    addMoreButton=TRUE;
  119. Boolean    goBigger=TRUE;
  120. Boolean    changeTopic=TRUE;
  121.  
  122.  
  123. char HelpdemoHelpVol[] = "helpdemo";
  124.  
  125. /************************************************************************
  126.  *
  127.  *  helpdemo
  128.  *    The main program for the helpdemo.
  129.  *
  130.  ************************************************************************/
  131. void main (
  132.     int argc,
  133.     char *argv[])
  134. {
  135.  
  136.    Display  *appDisplay;
  137.    
  138.    appName = strrchr(argv[0], '/');
  139.    if (appName != NULL)
  140.      appName++;
  141.    else
  142.      appName = argv[0];
  143.    
  144.    /* Initialize toolkit and open the display */
  145.    topLevel = XtInitialize(appName, "Dthelpdemo", NULL, 0, &argc, argv);
  146.    appDisplay = XtDisplay(topLevel);
  147.  
  148.    if (!appDisplay) 
  149.      {
  150.        XtWarning ("Dialogs: Can't open display, exiting...");
  151.        exit (0);
  152.      }
  153.   
  154.  
  155.    
  156.    /* Build up the Widget UI for the demo app */
  157.    CreateMainWindow(topLevel);
  158.  
  159.    XtMainLoop(); 
  160. }
  161.  
  162.  
  163.  
  164. /************************************************************************
  165.  * Function:  CreateMainWindow
  166.  *
  167.  *   This function creates a main window, calls the routine to build our
  168.  * menubar.
  169.  *
  170.  *************************************************************************/
  171. static void CreateMainWindow(
  172.     Widget parent)
  173. {
  174.  
  175.   Widget    main_window;
  176.   Widget    menuBar;
  177.   Widget    frame;
  178.   Widget        form;
  179.   Widget        manageFrame, manageForm, manageTitle, radioBox;
  180.   Widget        control1Frame, control1Form, control1Title, controlBox1;
  181.   Widget        control2Frame, control2Form, control2Title, controlBox2;
  182.   Arg        args[10];
  183.   int          n;
  184.   char        name[15];
  185.   int        len;
  186.  
  187.        
  188.   XmString labelString;
  189.         
  190.   /* Create a Main Window Widget */
  191.     
  192.   n = 0;
  193.   main_window = XmCreateMainWindow (parent, "mainwindow1", args, n);
  194.   XtManageChild (main_window);
  195.  
  196.   /* Build the Menus via our BuildMenus function */
  197.   menuBar = BuildMenus(main_window);
  198.  
  199.  
  200.   /*    Create Frame in the MainWindow     */
  201.   n = 0;
  202.   XtSetArg (args[n], XmNmarginWidth, 2);  n++;
  203.   XtSetArg (args[n], XmNmarginHeight, 2);  n++;
  204.   XtSetArg (args[n], XmNshadowThickness, 1);  n++;
  205.   XtSetArg (args[n], XmNshadowType, XmSHADOW_OUT);  n++;
  206.   frame = XmCreateFrame (main_window, "frame", args, n);
  207.   XtManageChild (frame);
  208.  
  209.         
  210.   /*    Create the form */
  211.   n = 0;
  212.   form = XmCreateForm(frame, "form", args, n);
  213.   XtManageChild(form);
  214.  
  215.  
  216.    /****** Create the Management section Frame ******/
  217.    n = 0;
  218.    XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM);        n++;
  219.    XtSetArg (args[n], XmNtopOffset, 5);                    n++;
  220.    XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM);        n++;
  221.    XtSetArg (args[n], XmNrightOffset, 5);                n++;
  222.    XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM);        n++;
  223.    XtSetArg (args[n], XmNleftOffset, 5);                n++;
  224.    XtSetArg (args[n], XmNmarginWidth, 5);                n++;
  225.    XtSetArg (args[n], XmNmarginHeight, 2);                n++;
  226.    XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING);        n++;
  227.    manageFrame = XmCreateFrame(form, "manageFrame", args, n);
  228.    XtManageChild (manageFrame);
  229.  
  230.    manageForm = XmCreateForm (manageFrame,"manageForm", NULL, 0);
  231.    XtManageChild (manageForm);
  232.  
  233.    XtAddCallback(manageForm, XmNhelpCallback, 
  234.                  HelpCB, CREATE_FRAME);
  235.  
  236.    /* create the frame title */
  237.    labelString = XmStringCreateLtoR ("Help Widget Management",
  238.                                       XmFONTLIST_DEFAULT_TAG);
  239.    n = 0;
  240.    XtSetArg (args[n], XmNlabelString, labelString);             n++;
  241.    XtSetArg (args[n], XmNchildType, XmFRAME_TITLE_CHILD);       n++;
  242.    XtSetArg (args[n], XmNtraversalOn, False);                   n++;
  243.    manageTitle = XmCreateLabelGadget(manageFrame,"manageTitle",args,n);
  244.    XtManageChild (manageTitle);
  245.    XmStringFree (labelString);
  246.  
  247.    /* Create the Radio Box widget to hold the toggle buttons */
  248.    n = 0;
  249.    XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM);            n++;
  250.    XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM);          n++;
  251.    XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM);          n++;
  252.    radioBox = XmCreateRadioBox(manageForm, "radioBox", args, n);
  253.    XtManageChild (radioBox);
  254.   
  255.  
  256.    /* Create the Create Widget button */
  257.    labelString = XmStringCreateLtoR("Create Sample Help Widget",
  258.                                      XmFONTLIST_DEFAULT_TAG);
  259.    n = 0;
  260.    XtSetArg (args[n], XmNlabelString, labelString);              n++;
  261.    createSampleWidgetBtn = 
  262.            XmCreateToggleButtonGadget(radioBox,"createSampleWidgetBtn",args,n);
  263.    XtManageChild (createSampleWidgetBtn);
  264.    XmStringFree (labelString);
  265.  
  266.    XtAddCallback(createSampleWidgetBtn, XmNarmCallback,
  267.                  ManageButtonsCB, (XtPointer)CREATE_SAMPLE);
  268.   
  269.  
  270.  
  271.    /* Create the Create Widget button */
  272.    labelString = XmStringCreateLtoR("Destroy Sample Help Widget",
  273.                                      XmFONTLIST_DEFAULT_TAG);
  274.    n = 0;
  275.    XtSetArg (args[n], XmNlabelString, labelString);              n++;
  276.    destroySampleWidgetBtn = 
  277.           XmCreateToggleButtonGadget(radioBox,"destroySampleWidgetBtn",args,n);
  278.    XtManageChild (destroySampleWidgetBtn);
  279.    XmStringFree (labelString);
  280.  
  281.    XtSetSensitive(destroySampleWidgetBtn, FALSE);
  282.  
  283.  
  284.    XtAddCallback(destroySampleWidgetBtn, XmNarmCallback,
  285.                  ManageButtonsCB, (XtPointer)DESTROY_SAMPLE);
  286.   
  287.  
  288.  
  289.    /****** Create the Control1 section Frame ******/
  290.    n = 0;
  291.    XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET);        n++;
  292.    XtSetArg (args[n], XmNtopWidget, manageFrame);                 n++; 
  293.    XtSetArg (args[n], XmNtopOffset, 5);                    n++;
  294.    XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM);        n++;
  295.    XtSetArg (args[n], XmNrightOffset, 5);                n++;
  296.    XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM);        n++;
  297.    XtSetArg (args[n], XmNleftOffset, 5);                n++;
  298.    XtSetArg (args[n], XmNmarginWidth, 5);                n++;
  299.    XtSetArg (args[n], XmNmarginHeight, 2);                n++;
  300.    XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING);        n++;
  301.    control1Frame = XmCreateFrame(form, "control1Frame", args, n);
  302.    XtManageChild (control1Frame);
  303.  
  304.    control1Form = XmCreateForm (control1Frame,"control1Form", NULL, 0);
  305.    XtManageChild (control1Form);
  306.  
  307.  
  308.    XtAddCallback(control1Form, XmNhelpCallback, 
  309.                  HelpCB, CONTROL1_FRAME);
  310.  
  311.    /* create the frame title */
  312.    labelString = XmStringCreateLtoR ("Controlling the Help Widgets",
  313.                                       XmFONTLIST_DEFAULT_TAG);
  314.    n = 0;
  315.    XtSetArg (args[n], XmNlabelString, labelString);             n++;
  316.    XtSetArg (args[n], XmNchildType, XmFRAME_TITLE_CHILD);       n++;
  317.    XtSetArg (args[n], XmNtraversalOn, False);                   n++;
  318.    control1Title = XmCreateLabelGadget(control1Frame,"control1Title",args,n);
  319.    XtManageChild (control1Title);
  320.    XmStringFree (labelString);
  321.  
  322.    /* Create the Radio Box widget to hold the toggle buttons */
  323.    n = 0;
  324.    XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM);            n++;
  325.    XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM);          n++;
  326.    XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM);          n++;
  327.    controlBox1 = XmCreateRowColumn(control1Form, "controlBox1", args, n);
  328.    XtManageChild (controlBox1);
  329.   
  330.  
  331.    /* Create the Create Widget button */
  332.    labelString = XmStringCreateLtoR("Change the Content",
  333.                                      XmFONTLIST_DEFAULT_TAG);
  334.    n = 0;
  335.    XtSetArg (args[n], XmNlabelString, labelString);              n++;
  336.    controlBtn1 = 
  337.           XmCreateToggleButtonGadget(controlBox1,"controlBtn1",args,n);
  338.    XtManageChild (controlBtn1);
  339.    XmStringFree (labelString);
  340.    XtSetSensitive(controlBtn1, FALSE);
  341.  
  342.    XtAddCallback(controlBtn1, XmNarmCallback,
  343.                  Control1ButtonsCB, (XtPointer)CHANGE_CONTENT);
  344.  
  345.    /* Change Size button*/
  346.    labelString = XmStringCreateLtoR("Change the Size",
  347.                                      XmFONTLIST_DEFAULT_TAG);
  348.    n = 0;
  349.    XtSetArg (args[n], XmNlabelString, labelString);              n++;
  350.    controlBtn2 = 
  351.         XmCreateToggleButtonGadget(controlBox1,"controlBtn2",args,n);
  352.    XtManageChild (controlBtn2);
  353.    XmStringFree (labelString);
  354.    XtSetSensitive(controlBtn2, FALSE);
  355.  
  356.  
  357.  
  358.    XtAddCallback(controlBtn2, XmNarmCallback,
  359.                  Control1ButtonsCB, (XtPointer)CHANGE_SIZE);
  360.  
  361.  
  362.  
  363.    /* Control the GUI*/
  364.    labelString = XmStringCreateLtoR("Control the User Interface",
  365.                                      XmFONTLIST_DEFAULT_TAG);
  366.    n = 0;
  367.    XtSetArg (args[n], XmNlabelString, labelString);              n++;
  368.    controlBtn3 = 
  369.         XmCreateToggleButtonGadget(controlBox1,"controlBtn3",args,n);
  370.    XtManageChild (controlBtn3);
  371.    XmStringFree (labelString);
  372.    XtSetSensitive(controlBtn3, FALSE);
  373.  
  374.  
  375.    XtAddCallback(controlBtn3, XmNarmCallback,
  376.                  Control1ButtonsCB, (XtPointer)CHANGE_GUI);
  377.   
  378.  
  379.  
  380.    /****** Create the Control2 section Frame ******/
  381.    n = 0;
  382.    XtSetArg (args[n], XmNtopAttachment, XmATTACH_WIDGET);        n++;
  383.    XtSetArg (args[n], XmNtopWidget, control1Frame);                       n++; 
  384.    XtSetArg (args[n], XmNtopOffset, 5);                    n++;
  385.    XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM);        n++;
  386.    XtSetArg (args[n], XmNrightOffset, 5);                n++;
  387.    XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM);        n++;
  388.    XtSetArg (args[n], XmNleftOffset, 5);                n++;
  389.    XtSetArg (args[n], XmNmarginWidth, 5);                n++;
  390.    XtSetArg (args[n], XmNmarginHeight, 2);                n++;
  391.    XtSetArg (args[n], XmNalignment, XmALIGNMENT_BEGINNING);        n++;
  392.    control2Frame = XmCreateFrame(form, "control2Frame", args, n);
  393.    XtManageChild (control2Frame);
  394.  
  395.    control2Form = XmCreateForm (control2Frame,"control2Form", NULL, 0);
  396.    XtManageChild (control2Form);
  397.  
  398.    XtAddCallback(control2Form, XmNhelpCallback, 
  399.                  HelpCB, CONTROL2_FRAME);
  400.  
  401.  
  402.    /* create the frame title */
  403.    labelString = XmStringCreateLtoR ("Controlling the Client Via Help Widgets",
  404.                                       XmFONTLIST_DEFAULT_TAG);
  405.    n = 0;
  406.    XtSetArg (args[n], XmNlabelString, labelString);             n++;
  407.    XtSetArg (args[n], XmNchildType, XmFRAME_TITLE_CHILD);       n++;
  408.    XtSetArg (args[n], XmNtraversalOn, False);                   n++;
  409.    control2Title = XmCreateLabelGadget(control2Frame,"control2Title",args,n);
  410.    XtManageChild (control2Title);
  411.    XmStringFree (labelString);
  412.  
  413.    /* Create the Radio Box widget to hold the toggle buttons */
  414.    n = 0;
  415.    XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM);            n++;
  416.    XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM);          n++;
  417.    XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM);          n++;
  418.    controlBox2 = XmCreateRowColumn(control2Form, "controlBox2", args, n);
  419.    XtManageChild (controlBox2);
  420.   
  421.  
  422.    /* Create the Create Widget button */
  423.    labelString = XmStringCreateLtoR("Client controled hypertext links",
  424.                                      XmFONTLIST_DEFAULT_TAG);
  425.    n = 0;
  426.    XtSetArg (args[n], XmNlabelString, labelString);              n++;
  427.    controlBtn4 = 
  428.           XmCreatePushButtonGadget(controlBox2,"controlBtn4",args,n);
  429.    XtManageChild (controlBtn4);
  430.    XmStringFree (labelString);
  431.   
  432.    XtAddCallback(controlBtn4, XmNarmCallback,
  433.                  Control1ButtonsCB, (XtPointer)SHOW_APP_DEFINED_LINKS);
  434.   
  435.  
  436.  
  437.  
  438.  
  439.   /* Set MainWindow areas */
  440.   XmMainWindowSetAreas (main_window, menuBar, NULL, NULL, NULL,    frame);
  441.       
  442.  
  443.   /* Force a size to the form */
  444. /*
  445.   n = 0;
  446.   XtSetArg(args[n], XmNwidth, 400); n++;
  447.   XtSetArg(args[n], XmNheight, 200); n++;      
  448.   XtSetValues(form, args, n);
  449. */
  450.   XtRealizeWidget (parent);
  451.  
  452.  
  453. } /* End CreateMainWindow */
  454.  
  455.  
  456.  
  457. /*********************************************************************
  458.  * Function:  BuildMenus
  459.  *
  460.  *   This procedure builds the menubar pulldows for our demo program
  461.  *
  462.   *********************************************************************/
  463. static Widget BuildMenus(
  464.     Widget parent)
  465.  
  466. {
  467.    Widget       menuBar;
  468.    Widget       c[10];
  469.    Widget    cascadeB2;
  470.    Widget       menupane1, menupane2; 
  471.    Widget       fileBtn1;
  472.    Widget       helpBtn1, helpBtn2, helpBtn3;
  473.    Arg        args[10];    
  474.    int          n;
  475.    XmString     accText;
  476.    XmString     labelStr;
  477.    char       * mnemonic;
  478.  
  479.    menuBar = XmCreateMenuBar (parent, "menuBar", args, 0); 
  480.    XtManageChild (menuBar);
  481.  
  482.  
  483.   /*******************************************************
  484.    * Menupane:  Exit, and related buttons 
  485.    *******************************************************/
  486.    
  487.   n = 0;
  488.   XtSetArg(args[n], XmNmarginWidth, 0);        ++n;
  489.   XtSetArg(args[n], XmNmarginHeight, 0);        ++n;
  490.   menupane1 = XmCreatePulldownMenu(menuBar, "menupane1", args, n);
  491.   
  492.  
  493.   /* Exit button */
  494.   labelStr = XmStringCreateLtoR("Exit",XmSTRING_DEFAULT_CHARSET);
  495.   accText = XmStringCreateLtoR("<Ctrl>X",XmSTRING_DEFAULT_CHARSET);
  496.   mnemonic = "x";
  497.  
  498.   n = 0;
  499.   XtSetArg(args[n], XmNaccelerator,"Ctrl <Key>X"); n++;
  500.   XtSetArg(args[n], XmNlabelString, labelStr); n++;
  501.   XtSetArg(args[n], XmNacceleratorText ,accText); n++;
  502.   XtSetArg(args[n], XmNmnemonic, mnemonic[0]); n++;
  503.   c[0] = fileBtn1 =
  504.        XmCreatePushButtonGadget(menupane1,"fileBtn1", args, n);
  505.    
  506.   XtAddCallback(fileBtn1, XmNactivateCallback, CloseCB,(XtPointer) NULL);
  507.    
  508.  
  509.   XmStringFree(accText);
  510.   XmStringFree(labelStr); 
  511.  
  512.   XtManageChildren(c, 1);
  513.  
  514.  
  515.   /*******************************************************
  516.    * Menupane:  Help, and related buttons 
  517.    *******************************************************/
  518.   n = 0;
  519.   XtSetArg(args[n], XmNmarginWidth, 0);        ++n;
  520.   XtSetArg(args[n], XmNmarginHeight, 0);        ++n;
  521.   menupane2 = XmCreatePulldownMenu(menuBar, "menupane2", args, n);
  522.  
  523.   
  524.   /* Item help button */
  525.   labelStr = XmStringCreateLtoR("On Item", XmSTRING_DEFAULT_CHARSET);
  526.   accText = XmStringCreateLtoR("<Ctrl>I",XmSTRING_DEFAULT_CHARSET);
  527.   mnemonic = "I";
  528.    
  529.   n = 0;
  530.   XtSetArg(args[n], XmNaccelerator,"Ctrl <Key>I"); n++;
  531.   XtSetArg(args[n], XmNlabelString, labelStr); n++;
  532.   XtSetArg(args[n], XmNacceleratorText ,accText); n++;
  533.   XtSetArg(args[n], XmNmnemonic, mnemonic[0]); n++;
  534.   c[0] = helpBtn1 = XmCreatePushButtonGadget(menupane2,"helpBtn1", args, n);
  535.   XtAddCallback(helpBtn1, XmNactivateCallback,
  536.                 HelpMenuCB, (XtPointer)HELP_ON_ITEM);
  537.     
  538.   XmStringFree(accText);
  539.   XmStringFree(labelStr); 
  540.    
  541.  
  542.  
  543.   /* On application button */
  544.   labelStr = XmStringCreateLtoR("On Application",XmSTRING_DEFAULT_CHARSET);
  545.   accText = XmStringCreateLtoR("<Ctrl>A",XmSTRING_DEFAULT_CHARSET);
  546.   mnemonic = "A";
  547.  
  548.   n = 0; 
  549.   XtSetArg(args[n], XmNaccelerator,"Ctrl <Key>A"); n++;
  550.   XtSetArg(args[n], XmNlabelString, labelStr); n++;
  551.   XtSetArg(args[n], XmNacceleratorText ,accText); n++;
  552.   XtSetArg(args[n], XmNmnemonic, mnemonic[0]); n++;
  553.   c[1] = helpBtn2 = XmCreatePushButtonGadget(menupane2,
  554.                                             "helpBtn2", args, n);
  555.   XmStringFree(accText);
  556.   XmStringFree(labelStr); 
  557.  
  558.   XtAddCallback(helpBtn2, XmNactivateCallback,
  559.                 HelpMenuCB, (XtPointer)HELP_ON_TOPIC);
  560.  
  561.  
  562.   /* On Version button */
  563.   labelStr = XmStringCreateLtoR("On Version", XmSTRING_DEFAULT_CHARSET);
  564.   accText = XmStringCreateLtoR("<Ctrl>V",XmSTRING_DEFAULT_CHARSET);
  565.   mnemonic = "V";
  566.  
  567.   n = 0;
  568.   XtSetArg(args[n], XmNaccelerator,"Ctrl <Key>V"); n++;
  569.   XtSetArg(args[n], XmNlabelString, labelStr); n++;
  570.   XtSetArg(args[n], XmNacceleratorText ,accText); n++;
  571.   XtSetArg(args[n], XmNmnemonic, mnemonic[0]); n++;
  572.   c[2] = helpBtn3 = XmCreatePushButtonGadget(menupane2,
  573.                           "helpBtn3",args, n);
  574.   XtAddCallback(helpBtn3, XmNactivateCallback, 
  575.                 HelpMenuCB, (XtPointer)HELP_ON_VERSION);
  576.   
  577.    XmStringFree(accText);
  578.    XmStringFree(labelStr); 
  579.  
  580.    XtManageChildren(c, 3);
  581.  
  582.  
  583.    /* Create Cascade buttons for menubar */
  584.    labelStr = XmStringCreateLtoR("File", XmSTRING_DEFAULT_CHARSET);
  585.    mnemonic = "F";
  586.    n = 0;
  587.    XtSetArg(args[n], XmNmnemonic, mnemonic[0]); n++;
  588.    XtSetArg(args[n], XmNsubMenuId, menupane1); n++;
  589.    XtSetArg(args[n], XmNlabelString, labelStr); n++;
  590.    c[0] = XmCreateCascadeButton(menuBar,"cascadeB1",args, n); 
  591.    XmStringFree(labelStr); 
  592.  
  593.  
  594.    labelStr = XmStringCreateLtoR("Help", XmSTRING_DEFAULT_CHARSET);
  595.    mnemonic = "H";
  596.    n = 0;
  597.    XtSetArg(args[n], XmNmnemonic, mnemonic[0]); n++;
  598.    XtSetArg(args[n], XmNsubMenuId, menupane2); n++;
  599.    XtSetArg(args[n], XmNlabelString, labelStr); n++;
  600.    c[1] = cascadeB2 = XmCreateCascadeButton(menuBar, "cascadeB2",
  601.                         args, n); 
  602.    XmStringFree(labelStr); 
  603.  
  604.    XtManageChildren(c, 2);
  605.  
  606.   
  607.    /* Attaches the Help menupane to the right side */
  608.    n = 0;
  609.    XtSetArg (args[n], XmNmenuHelpWidget, cascadeB2);  n++;
  610.    XtSetValues (menuBar, args, n);
  611.  
  612.    return(menuBar);
  613.  
  614.  
  615. }  /* End BuildMenus */
  616.  
  617.  
  618.  
  619. /*********************************************************************
  620.  * Function: ManageButtonsCallback
  621.  *
  622.  * Description: 
  623.  *
  624.  *********************************************************************/
  625. static void ManageButtonsCB(
  626.     Widget  parent,
  627.     XtPointer clientData,
  628.     XtPointer callData)
  629. {
  630.  
  631.   int      n;
  632.   Arg      args[10];    
  633.   Widget   helpWidget, printWidget;
  634.  
  635.   TurnOnHourGlass(topLevel);
  636.  
  637.   switch ((int)clientData)
  638.     {
  639.       case CREATE_SAMPLE:
  640.    
  641.       XtSetSensitive(destroySampleWidgetBtn, TRUE);
  642.       XtSetSensitive(createSampleWidgetBtn, FALSE);
  643.       XtSetSensitive(controlBtn1, TRUE);
  644.       XtSetSensitive(controlBtn2, TRUE);
  645.       XtSetSensitive(controlBtn3, TRUE);
  646.  
  647.       /* Set the state of our toggle buttons */
  648.       XmToggleButtonSetState(destroySampleWidgetBtn, FALSE, FALSE);
  649.  
  650.      if (quickWidget==NULL)
  651.         {
  652.             Widget dp = parent;
  653.             while (!XtIsSubclass(dp, applicationShellWidgetClass))
  654.                     dp = XtParent(dp);
  655.   
  656.             n =0;
  657.             XtSetArg (args[n], XmNtitle, "Quick Dialog Sample");  n++;
  658.             XtSetArg (args[n], DtNhelpVolume,HelpdemoHelpVol);   n++;
  659.             XtSetArg (args[n], DtNhelpType, DtHELP_TYPE_TOPIC);  n++;
  660.             XtSetArg (args[n], DtNlocationId, APP_MENU_ID);  n++;
  661.             quickWidget = DtCreateHelpQuickDialog(dp,"quickWidget",args, n);
  662.             
  663.  
  664.             XtAddCallback(quickWidget, DtNcloseCallback,
  665.                           CloseAndDestroyCB, (XtPointer)NULL);
  666.  
  667.             /* Add the popup position callback to our main help dialog */
  668.             XtAddCallback (XtParent(quickWidget), XmNpopupCallback,
  669.                           (XtCallbackProc)HelpMapCB, 
  670.                           (XtPointer)dp);
  671.  
  672.             /* Add our hypertext callback here */
  673.             XtAddCallback(quickWidget, DtNhyperLinkCallback,
  674.                        ProcessLinkCB, NULL);
  675.  
  676.  
  677.  
  678.             /* We do not want a print button for now so we unmap it */     
  679.             printWidget = DtHelpQuickDialogGetChild (quickWidget, 
  680.                                          DtHELP_QUICK_PRINT_BUTTON);
  681.             XtUnmanageChild (printWidget);
  682.   
  683.  
  684.             /* We do not want a help button for now so we unmap it */     
  685.             helpWidget = DtHelpQuickDialogGetChild (quickWidget, 
  686.                                         DtHELP_QUICK_HELP_BUTTON);
  687.             XtUnmanageChild (helpWidget);
  688.  
  689.             XtManageChild(quickWidget);
  690.  
  691.           }
  692.         break;
  693.  
  694.       case DESTROY_SAMPLE:
  695.  
  696.         XtSetSensitive(destroySampleWidgetBtn, FALSE);
  697.         XtSetSensitive(createSampleWidgetBtn, TRUE);
  698.         XtSetSensitive(controlBtn1, FALSE);
  699.         XtSetSensitive(controlBtn2, FALSE);
  700.         XtSetSensitive(controlBtn3, FALSE);
  701.  
  702.  
  703.         /* Set the state of our toggle buttons */
  704.         XmToggleButtonSetState(createSampleWidgetBtn, FALSE, FALSE);
  705.         XmToggleButtonSetState(controlBtn1, FALSE, FALSE);
  706.         XmToggleButtonSetState(controlBtn2, FALSE, FALSE);
  707.         XmToggleButtonSetState(controlBtn3, FALSE, FALSE);
  708.  
  709.  
  710.         /* Reinitialize our toggle button state flags */
  711.         addMoreButton=TRUE;
  712.         goBigger=TRUE;
  713.         changeTopic=TRUE;
  714.  
  715.  
  716.         if (quickWidget != NULL)
  717.         XtDestroyWidget(quickWidget);
  718.  
  719.         quickWidget = NULL;
  720.         moreButton = NULL;
  721.  
  722.         break;
  723.      
  724.       default:
  725.  
  726.         break;
  727.     } /* End of switch statement */
  728.  
  729.   TurnOffHourGlass(topLevel);
  730.  
  731.  
  732. }
  733.  
  734.  
  735.  
  736.  
  737.  
  738. /*********************************************************************
  739.  * Function: ManageButtonsCallback
  740.  *
  741.  * Description: 
  742.  *
  743.  *********************************************************************/
  744. static void Control1ButtonsCB(
  745.     Widget  parent,
  746.     XtPointer clientData,
  747.     XtPointer callData)
  748. {
  749.  
  750.   int               n;
  751.   Arg               args[10];    
  752.   static Dimension  columns=0;
  753.   static Dimension  rows=0;
  754.   
  755.  
  756.   TurnOnHourGlass(topLevel);
  757.  
  758.   switch ((int)clientData)
  759.     {
  760.       case CHANGE_CONTENT:
  761.          
  762.         /* Show a man page */
  763.         if (changeTopic)
  764.           {
  765.             n =0;
  766.             XtSetArg (args[n], DtNhelpType, DtHELP_TYPE_TOPIC);  n++;
  767.             XtSetArg (args[n], DtNlocationId, CREATE_FRAME);  n++;
  768.             XtSetValues(quickWidget, args, n);
  769.             changeTopic = FALSE;
  770.           }
  771.         else
  772.       {
  773.             /* Show Topic */
  774.             n = 0;
  775.             XtSetArg (args[n], DtNhelpType, DtHELP_TYPE_TOPIC);  n++;
  776.             XtSetArg (args[n], DtNlocationId, APP_MENU_ID);      n++;
  777.             XtSetValues(quickWidget, args, n);
  778.             changeTopic = TRUE;
  779.            }
  780.  
  781.         break;
  782.  
  783.       case CHANGE_GUI:
  784.     
  785.         if (moreButton == NULL)
  786.           {
  787.             /* Get the more buttion child */
  788.             moreButton = DtHelpQuickDialogGetChild(quickWidget, 
  789.                                                    DtHELP_QUICK_MORE_BUTTON);
  790.  
  791.             XtAddCallback(moreButton, XmNactivateCallback,
  792.                  DisplayMoreCB, (XtPointer)NULL);
  793.   
  794.  
  795.           }
  796.         
  797.         if (addMoreButton)
  798.           {
  799.  
  800.               /* manage the child */
  801.               XtManageChild(moreButton);
  802.               addMoreButton = FALSE;
  803.           }
  804.         else
  805.       {
  806.             /* unmanage more button */
  807.             XtUnmanageChild(moreButton);
  808.             addMoreButton = TRUE;
  809.  
  810.           }
  811.  
  812.         break;
  813.  
  814.       case CHANGE_SIZE:
  815.  
  816.         if (rows == 0)
  817.           {
  818.             /* Get the current dialog size */
  819.             n =0;
  820.             XtSetArg (args[n], DtNcolumns, &columns);  n++;
  821.             XtSetArg (args[n], DtNrows, &rows);   n++;
  822.             XtGetValues(quickWidget, args, n);
  823.           }
  824.  
  825.         if (goBigger)
  826.           {
  827.             n =0;
  828.             XtSetArg (args[n], DtNcolumns, columns+5);  n++;
  829.             XtSetArg (args[n], DtNrows, rows+5);   n++;
  830.             XtSetValues(quickWidget, args, n);
  831.             goBigger = FALSE;
  832.           }
  833.         else
  834.       {
  835.             /* Go smaller */
  836.             n =0;
  837.             XtSetArg (args[n], DtNcolumns, columns);  n++;
  838.             XtSetArg (args[n], DtNrows, rows);   n++;
  839.             XtSetValues(quickWidget, args, n);
  840.             goBigger = TRUE;
  841.           }
  842.  
  843.       
  844.         break;
  845.       
  846.       case SHOW_APP_DEFINED_LINKS:
  847.          
  848.          /* display the general dialog w/more help in it */
  849.          DisplayMain (parent, HelpdemoHelpVol, CONTROL2_FRAME);
  850.  
  851.  
  852.         break;
  853.  
  854.       default:
  855.  
  856.         break;
  857.     } /* End of switch statement */
  858.  
  859.  
  860.   TurnOffHourGlass(topLevel);
  861.  
  862.  
  863. }
  864.  
  865.  
  866. /*********************************************************************
  867.  * Function: HelpMenuCB
  868.  *
  869.  * Description: This is the callback that is called when the user selects
  870.  *              any of the help menu items.
  871.  *
  872.  *********************************************************************/
  873. static void HelpMenuCB(
  874.     Widget  widget,
  875.     XtPointer clientData,
  876.     XtPointer callData)
  877.  
  878. {
  879.   Widget selWidget=NULL;
  880.   String name;
  881.   Arg  argList[10];
  882.   Cardinal argCount;
  883.   int          n;
  884.   int  status=DtHELP_SELECT_ERROR;
  885.  
  886.  
  887.  
  888.   TurnOnHourGlass(topLevel);
  889.  
  890.  
  891.   /* Determine which help button was activated and display the
  892.    * appropriate help information */
  893.  
  894.    switch ((int)clientData)
  895.        {
  896.          case HELP_ON_ITEM:
  897.                while (!XtIsSubclass(widget, applicationShellWidgetClass))
  898.                    widget = XtParent(widget);
  899.  
  900.  
  901.                status = DtHelpReturnSelectedWidgetId(widget, NULL, &selWidget);
  902.  
  903.                 switch ((int)status)
  904.               {
  905.             case DtHELP_SELECT_ERROR:
  906.                       printf("Selection Error, cannot continue\n");
  907.                     break;
  908.             case DtHELP_SELECT_VALID:
  909.                       while (selWidget != NULL)
  910.                         {
  911.                           if ((XtHasCallbacks(selWidget, XmNhelpCallback) 
  912.                                             == XtCallbackHasSome))
  913.                             {
  914.                                XtCallCallbacks((Widget)selWidget, 
  915.                                                XmNhelpCallback,NULL);
  916.                                break;
  917.                             }
  918.                           else
  919.                            selWidget = XtParent(selWidget);
  920.                         }
  921.                     break;
  922.             case DtHELP_SELECT_ABORT:
  923.                       printf("Selection Aborted by user.\n");
  924.                     break;
  925.             case DtHELP_SELECT_INVALID:
  926.                       printf("You must select a component within your app.\n");
  927.                     break;
  928.  
  929.                   }
  930.  
  931.                break;
  932.  
  933.          case HELP_ON_TOPIC:
  934.                DisplayMain (widget, HelpdemoHelpVol, APP_MENU_ID);
  935.  
  936.                break;
  937.  
  938.              case HELP_ON_VERSION:
  939.                DisplayVersion (widget, HelpdemoHelpVol, VER_MENU_ID);
  940.                break;
  941.  
  942.            
  943.              default:
  944.  
  945.              break;
  946.            } /* End of switch statement */
  947.  
  948.   TurnOffHourGlass(topLevel);
  949.  
  950.  
  951. }
  952.  
  953.  
  954.  
  955.  
  956. /*********************************************************************
  957.  * Function: HelpCB
  958.  *
  959.  * Description: This is the callback that is called when the user selects
  960.  *              item help or F1 key help
  961.  *
  962.  *********************************************************************/
  963. static void HelpCB(
  964.     Widget  widget,
  965.     XtPointer clientData,
  966.     XtPointer callData)
  967. {
  968.  
  969.   char * locationId = (char *) clientData;
  970.  
  971.  
  972.  
  973.   /* Just display the proper help based on the id string passed in */
  974.   /* We pass in a NULL for our helpVolume because and let the value
  975.    * defined in the app-defaults file be used.
  976.    */
  977.  
  978.   DisplayMain (widget, HelpdemoHelpVol, locationId);
  979.  
  980.  
  981. }
  982.  
  983.  
  984.  
  985.  
  986. /*********************************************************************
  987.  * Function: CloseCB
  988.  *
  989.  * Description: This is the callback that is called when the user selects
  990.  *              the Exit menu button.
  991.  *
  992.  *********************************************************************/
  993. static void CloseCB (
  994.     Widget    w,
  995.     XtPointer    clientData,
  996.     XtPointer      callData)
  997.  
  998. {
  999.   /* Now we go away */
  1000.   exit(0);
  1001.  
  1002. }
  1003.  
  1004.  
  1005.  
  1006.  
  1007. /*********************************************************************
  1008.  * Function: DisplayMoreCB
  1009.  *
  1010.  * Description: Handles the selection of the more button added to the 
  1011.  *              sample quick help dialog widget.  It causes a 
  1012.  *              general help dialog to be posted w/more informaion in it.
  1013.  *
  1014.  *********************************************************************/
  1015. static void DisplayMoreCB (
  1016.     Widget    w,
  1017.     XtPointer    clientData,
  1018.     XtPointer   callData)
  1019.  
  1020. {
  1021.  
  1022.   /* display the general dialog w/more help in it */
  1023.   DisplayMain (w, HelpdemoHelpVol, MORE_BTN_ID);
  1024.  
  1025.  
  1026.  
  1027.  
  1028.  
  1029. }
  1030.  
  1031.  
  1032. /*********************************************************************
  1033.  * Function: CloseAndDestroyCB
  1034.  *
  1035.  * Description: Closes and destroys our sample quick help dialog widget.
  1036.  *
  1037.  *********************************************************************/
  1038. static void CloseAndDestroyCB (
  1039.     Widget    w,
  1040.     XtPointer    clientData,
  1041.     XtPointer   callData)
  1042.  
  1043. {
  1044.  
  1045.   /* Close and destroy the our quick dialog test widget */
  1046.   XtUnmanageChild (quickWidget);
  1047.   XtDestroyWidget(quickWidget);
  1048.  
  1049.  
  1050.   /* reinitialize our global sample widget, and associated moreButton */
  1051.   quickWidget = NULL;
  1052.   moreButton=NULL; 
  1053.   addMoreButton=TRUE;
  1054.  
  1055.  
  1056.   XtSetSensitive(destroySampleWidgetBtn, FALSE);
  1057.   XtSetSensitive(createSampleWidgetBtn, TRUE);
  1058.   XtSetSensitive(controlBtn1, FALSE);
  1059.   XtSetSensitive(controlBtn2, FALSE);
  1060.   XtSetSensitive(controlBtn3, FALSE);
  1061.   
  1062.   /* Set the state of our toggle buttons */
  1063.   XmToggleButtonSetState(createSampleWidgetBtn, FALSE, FALSE);
  1064.  
  1065.   XmToggleButtonSetState(controlBtn1, FALSE, FALSE);
  1066.   XmToggleButtonSetState(controlBtn2, FALSE, FALSE);
  1067.   XmToggleButtonSetState(controlBtn3, FALSE, FALSE);
  1068.  
  1069.  
  1070.   /* Reinitialize our toggle button state flags */
  1071.   addMoreButton=TRUE;
  1072.   goBigger=TRUE;
  1073.   changeTopic=TRUE;
  1074.  
  1075.  
  1076.   
  1077. }
  1078.  
  1079.  
  1080.  
  1081.  
  1082.  
  1083.  
  1084.  
  1085.  
  1086.  
  1087.  
  1088.  
  1089.  
  1090.  
  1091.  
  1092.  
  1093.  
  1094.  
  1095.  
  1096.  
  1097.  
  1098.  
  1099.  
  1100.  
  1101.  
  1102.  
  1103.